package com.linkgie.galaxyframework.process;

import java.util.List;

/**
 * 流程的执行节点（环节）；
 * <p>
 * 
 * 执行节点是流程中被用户定义用于执行业务动作的节点；
 * <p>
 * 
 * 相对应的是由系统定义的节点，包括起始节点 {@link StartPoint} 和结束节点
 * 
 * @author Hike
 *
 */
public interface ExecutionNode extends ProcessNode {

	/**
	 * 节点类型；
	 * 
	 * @return
	 */
	String getType();

	/**
	 * 节点的条件验证器；
	 * 
	 * <p>
	 * 如果为 null，则采用流程定义的条件验证器 {@link ProcessDefinition#getConditionValidatorType()}
	 * ；
	 * 
	 * @return
	 */
	String getConditionValidatorType();
	
	/**
	 * 节点的预处理器；
	 * 
	 * <p>
	 * 如果为 null，则不执行预处理操作；
	 * 
	 * @return
	 */
	String getNodePrehandlerType();

	/**
	 * 除了默认分支之外的所有条件分支；
	 * <p>
	 * 
	 * @return
	 */
	List<ConditionalBranch> getConditionalBranches();

	/**
	 * 默认分支；
	 * <p>
	 * 
	 * 默认分支是直接分支，当所有的条件分支都不匹配时，执行默认分支；
	 * 
	 * @return
	 */
	DirectBranch getDefaultBranch();

	/**
	 * 返回指定 ID 的分支；
	 * <p>
	 * 如果不存在指定 id 的分支，则返回 null；
	 * 
	 * @param branchId
	 * @return
	 */
	ProcessBranch getBranch(String branchId);

}
